package icu.d4peng.cloud.common.log.generator.spanid;

import com.alibaba.ttl.TransmittableThreadLocal;

/**
 * @author d4peng
 * @version 1.0.0
 * @date 2021-12-27 14:03
 * @description SpanIdGenerator:SpanId生成
 */
public abstract class SpanIdGenerator {
    /**
     * 用于存储当前的SpanId
     */
    protected static final TransmittableThreadLocal<String> currentSpanIdTL = new TransmittableThreadLocal<>();

    /**
     * 获得spanId
     *
     * @return 获得spanId
     */
    abstract public String getSpanId();

    /**
     * 设置spanId
     *
     * @param spanId spanId值
     */
    abstract public void setSpanId(String spanId);

    /**
     * 移除spanId
     */
    abstract public void remove();

    /**
     * 这里防止同时获取一个spanId出现并发问题:这里用于微服务远程调用分离spanId
     *
     * @return 下一个spanId
     */
    abstract public String generateNextSpanId();

}
